In computing, specifically computer storage, a redundant array of independent (or inexpensive) drives (or disks) (RAID) is an umbrella term for data storage schemes that divide and/or replicate data among multiple hard drives. They offer, depending on the scheme, increased data reliability and/or throughput.
A RAID controller is often used to manage the data going to different drives for the purpose of data redundancy and performance improvement. During an operation where data is read from or written to the RAID, a RAID controller uses semiconductor memory, such as double data rate (DDR) memory by example, for a working area to temporarily store the read data or data that is going to be written. This memory can also temporarily store arithmetics, such as parity and other error correction data by example, before the final result can be used to write to the hard drives. Such operations require the RAID controller to manage data across all devices in the RAID set simultaneously. For example, a RAID controller with 8 ports/PHYs may control up to 8 devices, which requires 8 different sets of DDR memory regions to be managed. Commonly owned U.S. Pat. No. 7,743,191 discloses details of an example RAID controller, the contents of which are incorporated by reference.
RAID controllers require access to semiconductor memory during the course of operation, and requests are made for different regions of the memory. Because the RAID controller manages many different mass storage devices and the memory is limited, there are situations where two or more requests for the same memory regions are deadlocked. A deadlock situation is one where neither request can ever be completed, for example because each request has reserved regions of the memory the other request also requires.
It is, therefore, desirable to provide a memory arbitration method of operating a RAID controller that prevents deadlock situations in requests for memory from occurring.